package com.jboa.service.impl;

import java.util.ArrayList;
import java.util.List;

import com.jboa.dao.FunctionDao;
import com.jboa.dao.ModuleDao;
import com.jboa.dao.RoleFunctionDao;
import com.jboa.model.Function;
import com.jboa.model.Module;
import com.jboa.model.RoleFunction;
import com.jboa.service.ModuleService;



public class ModuleServiceImpl implements ModuleService {

	private ModuleDao moduleDao;
	private RoleFunctionDao roleFunctionDao;
	private FunctionDao functionDao;
	public void setModuleDao(ModuleDao moduleDao) {
		this.moduleDao = moduleDao;
	}

	public void setFunctionDao(FunctionDao functionDao) {
		this.functionDao = functionDao;
	}

	public void setRoleFunctionDao(RoleFunctionDao roleFunctionDao) {
		this.roleFunctionDao = roleFunctionDao;
	}

	public List<Module> findModule(List<Integer> rids) {
		List<Module> mlist= new ArrayList<Module>();
		//确定功能所在的模块
		for(Integer rid:rids){
			mlist.addAll(roleFunctionDao.findModuleHad(rid));		}
		//确定各个模块的相应功能：并不见得该模块所有功能都分配给该角色
		for(int i=0;i<mlist.size();i++){
			Module module= mlist.get(i);
			//获取各个模块的所有功能
			List <Function> funcList =this.functionDao
					.findByProperty("module.id", module.getId());
			// 判断各个功能是否被分配给某角色
			for(int j=0;j<funcList.size();j++){				
				Function func = funcList.get(j);
				for(int k=0;k<rids.size(); k++){
					Integer rid =rids.get(k);
					List <RoleFunction>rfs =this.roleFunctionDao.
					findBy2Properties("role.id", "function.id",rid,  func.getId());
					if(rfs!=null&& rfs.size()>0)
					for(RoleFunction rf :rfs){
						
						module.getFunctions().add(rf.getFunction());
					}					
				}
			}			
		}	
		return mlist;
	}

	public Module findSingleModule(Integer id) {
		// TODO Auto-generated method stub
		return this.moduleDao.findById(id);
	}

	public void modifyModule(Module m) {
		this.moduleDao.update(m);

	}

	public void newModule(Module m) {
		this.moduleDao.save(m);

	}

	public List<Module> operateModule() {
		// TODO Auto-generated method stub
		return this.moduleDao.findAll();
	}

	public void removeModule(Module m) {
		this.moduleDao.delete(this.findSingleModule(m.getId()));

	}

}
